Skip to content

v13: /goal stays copilot; autopilot only on explicit 'don't ask me' opt-in#221

Open
MagMueller wants to merge 1 commit into
v12-security-and-cleanupfrom
v13-goal-is-copilot
Open

v13: /goal stays copilot; autopilot only on explicit 'don't ask me' opt-in#221
MagMueller wants to merge 1 commit into
v12-security-and-cleanupfrom
v13-goal-is-copilot

Conversation

@MagMueller
Copy link
Copy Markdown
Contributor

@MagMueller MagMueller commented May 15, 2026

Stacked on #220 (v12). Fixes the '/goal X' vs 'my goal is X' confusion you called out.

New model

  • /goal is a continuous goal-mode signal, but stays in copilot by default. Agent keeps working across turns: scan → draft → post card → end turn. User taps Yes/Skip/More → new turn picks up via --resume. State persists in agency.db / goals.md / notebook.md. No 30-min cap.

  • Autopilot unlocks only on explicit user opt-in. Phrases in the user's own prompt like 'don't ask me', 'just do it yourself', 'no approvals', 'full autonomy', 'don't bother me', 'act on your own' flip the topic to autopilot.

  • Natural-language goals = same as /goal. 'Make my startup successful' with no slash command gets the same continuous copilot treatment.

Note on codex /goal native loop

The bot dispatches via codex exec --json which doesn't honor slash commands. So codex's native /goal loop (gated by [features] goals = true, v7) isn't actually triggered by the bot — our continuous-copilot behavior is entirely prompt-driven now. The goals = true config still ships for users who run codex in TUI mode interactively. If you want bot-driven codex /goal TUI streaming, that's a v14+ pty/tmux integration.

Tests

21 + 11 pass. Mini app imports cleanly.

🤖 Generated with Claude Code


Summary by cubic

Make /goal a continuous copilot mode: the agent keeps working across turns, posts approval cards, and has no timeout. Autopilot now requires explicit opt-in (e.g., "don't ask me", "just do it"); natural-language goals behave the same as /goal, and the system prompt plus Telegram /help text are updated to match.

Written for commit 514f18e. Summary will update on new commits. Review in cubic

…opt-in

You called out the confusion: "/goal make my startup successful" sounds nearly identical to a user just saying "my goal is to make my startup successful" — but in the previous model one triggered autopilot and the other didn't. That's a footgun.

New model:

- **/goal is a continuous goal-mode signal, but stays in copilot by default.** Agent keeps working across turns: scan, draft, post a card, end turn. User taps Yes/Skip/More on the card; that's a new turn (`--resume` carries session context); agent picks up where it left off, queues the next concrete action, posts the next card. Each turn is one cycle of the loop. State persists in `agency.db` / `goals.md` / `notebook.md`. No 30-min cap — a `/goal` can run for days.

- **Autopilot is unlocked only by explicit user opt-in.** Phrases in the user's prompt like *"don't ask me", "just do it yourself", "no approvals", "full autonomy", "don't bother me", "act on your own"* flip the topic to autopilot — agent acts end-to-end, no cards, only stops at irreversible/external boundaries. Without one of those cues, **stay copilot even inside `/goal`**.

- **Natural-language goals = same as `/goal`.** "Make my startup successful" with no slash command gets the same continuous copilot treatment. The slash is just a convention.

System prompt updated. /help text + COMMANDS list cleaned up. Tests: 21 + 11 pass.

Note: the codex `[features] goals = true` config (v7) still ships, but since the bot dispatches via `codex exec --json` (non-interactive, slash commands not honored), codex's native /goal loop isn't actually being triggered. Our continuous-copilot behavior is entirely prompt-driven — which is what the new doctrine wants anyway. If you want codex's TUI /goal loop someday, that's a separate pty/tmux integration (v14+ candidate).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 2 files

Re-trigger cubic

MagMueller added a commit that referenced this pull request May 15, 2026
…omposio for codex

Lands 16 stacked PRs reviewed by multiple sub-agents:

- v1 (#209)  /goal as primitive, per-topic autopilot vs copilot
- v2 (#210)  drop agency-mode gate, fold doctrine into CLAUDE.md, delete old Mini App UI
- v3 (#211)  CLAUDE.md → system-prompt.md (source of truth), agent identity = "agency"
- v4 (#212)  trim system prompt to 87 lines, mode emoji in topic title, extract bot/markdown.py
- v5 (#213)  heartbeat-by-default plumbing (later removed), copilot voice fix, autopilot security note
- v6 (#214)  steering semantics, new-topic spawning, 2-option cards, source-aware images
- v7 (#215)  /goal IS autopilot framing, drop topic emoji prefix, silence allowed, codex goals=true, `schedule` alias
- v8 (#216)  drop --spawn-topic, --importance, trim agency-report docstring
- v9 (#217)  new-topic helper — spawn fresh lane synchronously, queue heartbeat
- v10 (#218) self-schedule only when waiting on something concrete; drop auto-heartbeats
- v11 (#219) /goal is a verbatim CLI passthrough; bot is a dumb pipe
- v12 (#220) drop 30-min timeout, kill lingering heartbeat, prompt-injection defenses, seed goals.md
- v13 (#221) /goal stays copilot by default; autopilot only on explicit user opt-in
- v14 (#222) doctrine fixes from final multi-agent review
- v15 (#223) tighten autopilot triggers — drop the loose phrases
- v16 (#224) register composio MCP for codex too; simplify autopilot trigger paragraph

Tests: 22 pass.

Follow-ups (tracked, not in this merge):
- P0: install bootstrap.sh as /usr/local/sbin root:root (closes the trivial bux→root)
- P1: stuck-lane watchdog (no-stdout-for-30-min SIGTERM)
- P1: /invite is a dead command (remove from BotFather menu)
- P1: composio tool names wrong-case in system prompt
- P1: help text + COMMANDS still reference dropped autopilot trigger phrases
- P1: BUX_BOX_TOKEN provenance for OSS self-host installs
- P2: button-tap dispatches bypass _enqueue (lane race on rapid taps)
- P2: persisted per-topic autopilot flag in state (instead of LLM phrase detection)
- P2: agency_db ghost columns (importance, spawn_topic)
- P2: mini app teardown decision (1700 LOC for an unreferenced surface)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant